package com.sxj.corejava.code13_jdbc;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * @author 石小俊
 */
public class Test14_druid {

    public static void main(String[] args) throws SQLException {
        test02();
    }

    public static void test01() throws SQLException {
        DruidDataSource ds = new DruidDataSource();
        // 配置数据库连接信息
        ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
        ds.setUrl("jdbc:mysql://127.0.0.12:3306/jdbc?useUnicode=true&characterEncoding=utf-8");
        ds.setUsername("root");
        ds.setPassword("root");

        // 配置初始化连接数
        ds.setInitialSize(1);
        // 配置最大活跃数:表示最多有多少个连接被使用
        ds.setMaxActive(1);
        // 最大空闲数:保证连接池中最多存在多多少个空闲的连接
        ds.setMaxIdle(1);
        // 最小空闲数:保证连接池中至少存在多少个空闲连接
        ds.setMinIdle(1);
        // 最长等待时间:超时时间,单位毫秒
        ds.setMaxWait(3000);

        // 从连接池中获取连接
        Connection conn = ds.getConnection();
        System.out.println(conn);
//        conn.close();
        Connection conn2 = ds.getConnection();
        System.out.println(conn2);
    }

    public static void test02() {
        Properties p = new Properties();
        try {
            p.load(Test13_dbcp.class.getClassLoader().getResourceAsStream("dataSource.properties"));
            System.out.println(p);
            DataSource ds = DruidDataSourceFactory.createDataSource(p);
            Connection conn = ds.getConnection();
            System.out.println(conn);
            Connection conn2 = ds.getConnection();
            System.out.println(conn2);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}
